#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>
#include "oceano.h"
#include "item.h"
#include "fisica.h"
#include "grafico.h"

/*limpa todo o oceano*/
void limpaOceano (BITMAP *oceano, BITMAP *buffer) {
	blit(oceano, buffer, 0,0,0,0,OC_SIZE_X,OC_SIZE_Y);
}

/*imprime todo o oceano*/
void desenhaOceano (BITMAP *buffer, BITMAP *tela) {
	blit(buffer, tela, 0,0,0,0,OC_SIZE_X,OC_SIZE_Y);
}

void desenhaAsimov(BITMAP *tela, BITMAP *asimov){
	float posx, posy, raio;
	getAsimovPosicao(&posx, &posy, &raio);
#ifdef DRAW_BMP
	draw_sprite(tela, asimov, posx - raio, posy - raio);
#else
	circlefill(tela,posx,posy,raio,makecol(255,215,0));
#endif
}

void desenhaCorais(BITMAP *tela, BITMAP *coralP, BITMAP *coralM, BITMAP *coralG){
	int i;
	float posx, posy, raio;
	for (i = 0 ; i < numCoraisNoVetor() ; i++) {
		getCoralPosicao(i, &posx, &posy, &raio);
#ifdef DRAW_BMP
		if (raio == CORALPQ)
			draw_sprite(tela, coralP, posx - raio, posy - raio);
		else if(raio == CORALMD)
			draw_sprite(tela, coralM, posx - raio, posy - raio);
		else
			draw_sprite(tela, coralG, posx - raio, posy - raio);
#else
		circlefill(tela,posx,posy,raio,makecol(0,150,0));
#endif
	}
}

void desenhaNaufragos(BITMAP *tela, BITMAP *naufra){
	naufrago *primeiro, *next;
	float posx, posy, vx, vy, raio;
	primeiro = nextNaufrago ();   /*atua como uma cabeca de lista circular*/
	next = primeiro;
	do{   /*enquanto nao da a volta na lista e percorre todos os naufragos*/
		if(next == NULL) break;
		getNaufragoPosVel(next, &posx, &posy, &vx, &vy);
		getNaufragoRaio(next, &raio);
#ifdef DRAW_BMP
		draw_sprite(tela, naufra, posx - raio, posy - raio);
#else
		circlefill(tela,posx,posy,raio,makecol(255,0,0));
#endif
		next = nextNaufrago ();
	} while (next != primeiro);
}

void desenhaBotes(BITMAP *tela, BITMAP *bote1, BITMAP *bote2, BITMAP *anchor){
	int i;
	float x1, y1, x2, y2, x3, y3;
        float posx, posy, vx, vy, raio, dir, vel, rad;
	fixed binary_angle;

	for (i = 0 ; i < NUMBOTES ; i++) {
		getBotePosVel(i, &posx, &posy, &vx, &vy);
		euclidianoParaPolar (vx, vy, &dir, &vel);
                rad=GRAUS2RAD(dir);
		binary_angle = fixmul(ftofix(rad), radtofix_r);

		getBoteRaio(i, &raio);
		getBotePontosDesenho (i, &x1, &y1, &x2, &y2, &x3, &y3);
		if((i % 2) == 0) {
#ifdef DRAW_BMP
			rotate_sprite(tela, bote1, posx - raio, posy - raio, binary_angle);
		        if(!getAncora(0))
                        draw_sprite(tela, anchor, posx - raio, posy - raio);
#else
			triangle(tela , x1 , y1 , x2 , y2 , x3 , y3, makecol(205,127,50));
#endif
		}
		else{
#ifdef DRAW_BMP
			rotate_sprite(tela, bote2, posx - raio, posy - raio, binary_angle);
		        if(!getAncora(1))
                        draw_sprite(tela, anchor, posx - raio, posy - raio);
#else
			triangle(tela , x1 , y1 , x2 , y2 , x3 , y3, makecol(138,43,226));
#endif
		}
	}
}

void show_info(BITMAP *tela){
	textprintf_ex(tela, font, 10, 10, makecol(255, 255, 255),
                    -1, "Jogador Amarelo: vidas-%d salvos-%d pontos-%d", getVidas(0), getSalvos(0), getPontos(0));
	textprintf_ex(tela, font, 10, 20, makecol(255, 255, 255),
                    -1, "Jogador Verde: vidas-%d salvos-%d pontos-%d", getVidas(1), getSalvos(1), getPontos(1));
	textprintf_ex(tela, font, 600, 10, makecol(255, 255, 255),
                    -1, "Naufragos para serem resgatados: %d", numNaufragosNoVetor());
}

void imprime_fim(BITMAP *tela){
        if(getPontos(0) > getPontos(1))
	textprintf_ex(tela, font, 100, 300, makecol(255, 255, 255),
                    -1, "Jogador Amarelo venceu!");
        else if(getPontos(1) > getPontos(0))
	textprintf_ex(tela, font, 100, 300, makecol(255, 255, 255),
                    -1, "Jogador Verde venceu!");
        else {
	textprintf_ex(tela, font, 100, 300, makecol(255, 255, 255),
                    -1, "O jogo empatou!");
        }
}
